Решаване на уравнения и системи уравнения с функциите на Mathematica:
Solve,  Eliminate, Reduce, FindRoot  
от системния помощник  в меню Help/Help Browser ...

Трябва да отбележим, че вградената функция Solve[ ] винаги опитва да използва математически формули за да реши уравненията точно. Ако това не е възможно пробваме функциите NSolve, Eliminate, Reduce, FindRoot, ...

Пример 1.  Решаване на квадратно уравнение и извличане на корените му от списъка на решенията:

Solve[x^2  4]              ... 4;о  вместо = *) x1 = x/.%[[1]] x2 = x/.%%[[2]]

{{x -2}, {x2}}

-2

2

Проверка на съдържанието на  x1,  x2 :

x1 x2

-2

2

Пример 2.  Решаване на полиномното уравнение  x^6 - 10    ' z ' .   След товk ... 8;ка на резултата .

z = Solve[x^6 - 10] x3 = x/.z[[3]] x5 = x/.z[[5]]

{{x -1}, {x1}, {x -(-1)^(1/3)}, {x (-1)^(1/3)}, {x -(-1)^(2/3)}, {x (-1)^(2/3)}}

-(-1)^(1/3)

-(-1)^(2/3)

Следват техните числени стойности с 12 десетични знака:

N[x3,12]
N[x5,12]

RowBox[{RowBox[{-, 0.500000000000}], -, RowBox[{0.866025403784,  , }]}]

RowBox[{0.500000000000, -, RowBox[{0.866025403784,  , }]}]

Пример 3. Опитваме се да решим точно равнението   x^7 - 5x^3 (x + 1)^(1/2), но вместо това системата ни връща списък с правилата за преобразованията. След това опитваме да решим уравнението числено с функцията NSolve[ ]. Уравнението има 2 реални и 6 комплексни корена.

r = Solve[x^7 - 5x^3 (x + 1)^(1/2), x] r = NSolve[x^7 - 5x^3 (x + 1)^(1/2), x]

{{xRoot[-1 - #1 + 25 #1^6 - 10 #1^10 + #1^14&, 1]}, {xRoot[-1 - #1 + 25 #1 ... 1^6 - 10 #1^10 + #1^14&, 13]}, {xRoot[-1 - #1 + 25 #1^6 - 10 #1^10 + #1^14&, 14]}}

RowBox[{{, RowBox[{RowBox[{{, RowBox[{x, , 1.52763}], }}], ,, RowBox[{{, RowBox[{x, &# ... 71,  , }]}]}], }}], ,, RowBox[{{, RowBox[{x, , RowBox[{-, 0.520013}]}], }}]}], }}]

Пример 4.  Опит за точно решаване на две тригонометрични уравнения, но това не винаги е възможно.

Solve[Cos[x]== a,x]
Solve[Cos[x]== 2x ,x]

Solve :: ifun : Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information.  More…

{{x -ArcCos[a]}, {xArcCos[a]}}

Solve :: tdep : The equations appear to involve the variables to be solved for in an essentially non-algebraic way.  More…

Solve[Cos[x] 2 x, x]

Пример 5. За решаване на второто уравнение от пример 4 рисуваме графиката за да локализираме някой реален корен и прилагаме функцията  FindRoot[ ], реализираща метода на Нютон. За начално приближение може да вземем  x=0.

Plot[Cos[x]-2x,{x,-5,5}]
FindRoot[Cos[x]== 2x, {x,0}]

[Graphics:HTMLFiles/index_24.gif]

⁃Graphics⁃

RowBox[{{, RowBox[{x, , 0.450184}], }}]

Пример 6.  Аналогично решаваме система от две уравнения и запомняме намерените корени в променливите  а  и  b :

f = 3x + y-5
g =-x + 2y+1
Solve[{f==0,g==0},{x,y}]    (* В първите къдрави скоби е указан списъкът на уравненията *)
    (* а във вторите къдрави скоби - списъкът на неизвестните x,y *)
N[%]
a= x/. %[[1]]
b= y/. %%[[1]]

-5 + 3 x + y

1 - x + 2 y

{{x11/7, y2/7}}

RowBox[{{, RowBox[{{, RowBox[{RowBox[{x, , 1.57143}], ,, RowBox[{y, , 0.285714}]}], }}], }}]

1.57143

0.285714

Пример 7.  Проверка чрез заместване:

a
b
f /. {x->a,y->b}
g /. {x->a,y->b}

1.57143
0.285714
0.
0.

Пример 8.  Система уравнения с параметри:

Solve[{c*x + y==0, 3x + (1+c)y == 1}, {x,y}]

{{x -1/(-3 + c + c^2), yc/(-3 + c + c^2)}}

Пример 9.  Понякога отговорът е огромен  (тук около 4 екранни страници формули)  и може би не ни върши никаква полезна работа.  За да го покажете/скриете можете да щракнете два пъти на скобата на клетката най-вдясно на реда.

p = x^2 + 2y 3 ;     q = 3x + y^21 ; Solve[ {p, q }, {x, y}]

Ето числените стойности:

%//N

RowBox[{{, RowBox[{RowBox[{{, RowBox[{RowBox[{x, , RowBox[{RowBox[{1.70919, }] ... Box[{RowBox[{x, , RowBox[{-, 0.354983}]}], ,, RowBox[{y, , 1.43699}]}], }}]}], }}]

Пример 10. Ще решим система от две уравнения с две неизвестни x, y. За удобство запомняме уравненията в две помощни променливи  ur1, ur2 . Забележете, че използваме символа == (равенство), вместо символа за присвояване =.  Пробваме да решим точно задачата с функцията Solve[ ] относно {x, y}. Тя ни дава като изход възможните точни корени и описание за другите, според начина на решаване - тук чрез заместване на  y. След това показваме числените стойности на резултата.  Накрая извличаме стойностите на третата двойка решения в отделни клетки x3 и y3, което би ни позволило да ги използваме по-нататък при необходимост. Опитайте аналогично да решите и други задачи, да извлечете корени.

ur1 = x^3 - 2x y - 10 ur2 = y^2/x + 4y - x -1 Solve[{ur1, ur2}, {x, y}]   ... 0; решения  *) x3 = x/.%[[3]] y3 = y/.%%[[3]]

-1 + x^3 - 2 x y == 0

-x + 4 y + y^2/x == -1

{{y0, x1}, {y1/2 Root[-1 - #1 + 7 #1^2 + 5 #1^3 + 9 #1^4 + #1^5&,  ... ^3 + 9 #1^4 + #1^5&, 5]^4), xRoot[-1 - #1 + 7 #1^2 + 5 #1^3 + 9 #1^4 + #1^5&, 5]}}

RowBox[{{, RowBox[{RowBox[{{, RowBox[{RowBox[{y, , 0.}], ,, RowBox[{x, , 1.}]} ... [{x, , RowBox[{RowBox[{-, 0.265139}], +, RowBox[{0.952031,  , }]}]}]}], }}]}], }}]

RowBox[{-, 0.327031}]

1.58238

Пример 11. При сложни примери си струва да се опита евентуално опростяване чрез елиминиране на неизвестни в някои уравнения. Ето елиминирането на  x за системата от пример 10 и елиминирането на  y.  Като резултат получаваме уравнения от шеста степен съответно по y  и по x.

opr1=Eliminate[{ur1,ur2},x]
opr2=Eliminate[{ur1,ur2},y]

10 y + 43 y^2 + 74 y^3 - 12 y^4 - 36 y^5 + y^6 == 0

-8 x^2 + 2 x^3 - 4 x^4 + 8 x^5 + x^6 == -1

Пример 12. Тук пък се решават уравненията от горния пример, но трябва да се доосмисли точното съответствие между стойностите на неизвестните.

rey=N[Solve[opr1,y]]
rex=N[Solve[opr2,x]]

RowBox[{{, RowBox[{RowBox[{{, RowBox[{y, , 0.}], }}], ,, RowBox[{{, RowBox[{y,  ... Box[{y, , RowBox[{RowBox[{-, 0.282294}], +, RowBox[{0.23497,  , }]}]}], }}]}], }}]

RowBox[{{, RowBox[{RowBox[{{, RowBox[{x, , 1.}], }}], ,, RowBox[{{, RowBox[{x,  ... ox[{x, , RowBox[{RowBox[{-, 0.265139}], +, RowBox[{0.952031,  , }]}]}], }}]}], }}]

Този проблем решаваме например така: отделяме втория корен за x от горния резултат (втори ред) и го заместваме в някое от изходните уравнения. Полученото уравнение решаваме относно y и така получаваме съответното решение. Крайният отговор е:  { x = - 8.5107,  y = 36.2737 }.

x2=x/.rex[[2]]
ur11=ur1 /. x->x2
N[Solve[ur11,y ]]

RowBox[{-, 8.51057}]

RowBox[{RowBox[{RowBox[{-, 617.419}], +, RowBox[{17.0211,  , y}]}], ==, 0}]

RowBox[{{, RowBox[{{, RowBox[{y, , 36.2737}], }}], }}]

Пример 13. Mathematica решава и системи хомогенни уравнения. Следва система от три уравнения с три неизвестни.

Clear[x, y, z] Solve[{x^2 + 2y - 3z0, x - z - y0, -x + 6y + 4z0}, {x, y, z}]

{{y -63/4, z105/4, x21/2}, {y0, z0, x0}}

Пример 14. Всички възможни случаи с изследване можем да получим с функцията Reduce. Тя използва представяне на резултата с логическите функции || (логическо събиране)  и   && (логическо умножение). Ето как изглежда решаването на квадратно уравнение с произволни параметри a, b, c.

Reduce[a x^2 + b x + c0, x]

x == (-b - (b^2 - 4 a c)^(1/2))/(2 a) &&a≠0 || x == (-b + (b^2 - 4 a c)^(1/2))/( ... ≠0 || a == 0&&b == 0&&c == 0 || a == 0&&x == -c/b&&b≠0

Ако заредим променливите с числени стойности, нещата изглеждат иначе:

a = 5 Reduce[a x^2 + b x + c0, x] b = 6 Reduce[a x^2 + b x + c0, x] c = -3 Reduce[a x^2 + b x + c0, x] N[%]

5

x == 1/5 (-3 - 2 6^(1/2)) || x == 1/5 (-3 + 2 6^(1/2))

6

x == 1/5 (-3 - 2 6^(1/2)) || x == 1/5 (-3 + 2 6^(1/2))

-3

x == 1/5 (-3 - 2 6^(1/2)) || x == 1/5 (-3 + 2 6^(1/2))

RowBox[{RowBox[{x, ==, RowBox[{-, 1.5798}]}], ||, RowBox[{x, ==, 0.379796}]}]

Пример 15. Тук даваме решаването на пример 10 с функцията Reduce. Понеже отговорът е доста дълъг и сложен логически израз, то няма да го показваме, като накрая на оператора запишем символа ; (точка и запетая). Веднага следва числената стойност на резултатите.

Reduce[{ur1, ur2},{x,y}];
N[%]

RowBox[{RowBox[{RowBox[{x, ==, 1.}], &&, RowBox[{y, ==, 0.}]}], ||, RowBox[{RowBox[{x, ... amp;&, RowBox[{y, ==, RowBox[{RowBox[{-, 0.282294}], +, RowBox[{0.23497,  , }]}]}]}]}]

Пример 16.  Накрая даваме и решаването на същата задача с числен метод, като се задава начална стойност на корените. При зададени реални значения се намира реален корен, а при комплексни - евентуален комплексен корен. Пробвайте и с други начални стойности за да намерите и други корени.

FindRoot[{ur1,ur2},{x,-1},{y,-1}]
FindRoot[{ur1,ur2},{x,-0.1+I},{y,I}]

RowBox[{{, RowBox[{RowBox[{x, , 1.}], ,, RowBox[{y, , 1.28004*10^-13}]}], }}]

RowBox[{{, RowBox[{RowBox[{x, , RowBox[{RowBox[{-, 0.265139}], +, RowBox[{0.952031,  , ... , RowBox[{y, , RowBox[{RowBox[{-, 0.282294}], +, RowBox[{0.23497,  , }]}]}]}], }}]

Пример 17. Тук следва изразяването на едната променлива чрез другата.

f1=Reduce[ur1,y]
f2=Reduce[ur2,y]

                     3
               -1 + x
x != 0 && y == -------
                 2 x
                                              2
               -4 x - Sqrt[-4 (1 - x) x + 16 x ]
x != 0 && y == --------------------------------- ||
                               2

                                               2
                -4 x + Sqrt[-4 (1 - x) x + 16 x ]
x != 0 && y == ---------------------------------
                                2

Created by Mathematica  (December 29, 2007)